﻿using System;

class Test
{
    static void Main()
    {
        //Subset Sum - използват се кодовете на Грей
        checked
        {
            long S = long.Parse(Console.ReadLine());
            byte N = byte.Parse(Console.ReadLine());

            long[] numbers = new long[N];
            for (int i = 0; i < N; i++)
            {
                numbers[i] = long.Parse(Console.ReadLine());
            }

            int sumCount = 0;
            int combinations = (int)Math.Pow(2, N);
            for (int i = 1; i < combinations; i++)
            {
                long tempSum = 0;
                for (int j = 0; j < N; j++)
                {
                    int mask = 1 << j;
                    int IandMask = mask & i;
                    int bit = IandMask >> j;

                    //int bit = ((1 << j) & i) >> j; - може и така да се разпише но е объркващо, защото има 3 операции наведнъж
                    if (bit == 1)
                    {
                        tempSum += numbers[j];
                    }
                }
                if (tempSum == S)
                {
                    sumCount++;
                }
            }
            Console.WriteLine(sumCount);
        }
    }
}

